package com.boarsoft.dao.sharding.executor;

/**
 * 通过分库分表执行SQL的模板方法
 *
 */
// @Component
public class SqlRouteExecutorUtil {

	private static SqlRouteExecutor sqlRouteExecutor;

	// @Autowired
	public SqlRouteExecutorUtil(SqlRouteExecutor sqlRouteExecutor) {
		SqlRouteExecutorUtil.sqlRouteExecutor = sqlRouteExecutor;
	}

	/**
	 * 在指定分片下执行SQL方法（带返回值）
	 * 
	 * @param shard
	 *            分片号，即 DBP GROUP ID
	 * @param callBack
	 *            执行SQL的方法（带返回值）
	 * @return
	 */
	public static Object executeQuery(String tableIndex, SqlCallBack callBack) {
		return sqlRouteExecutor.executeQuery(tableIndex, callBack);
	}

	/**
	 * 在指定分片下执行SQL方法（不带返回值）
	 * 
	 * @param shard
	 *            分片号，即 DBP GROUP ID
	 * @param callBack
	 *            执行SQL的方法（不带返回值）
	 * @return
	 */
	public static void execute(String tableIndex, SqlVoidCallBack callBack) {
		sqlRouteExecutor.execute(tableIndex, callBack);
	}

	/**
	 * 在新事务内，在指定分片下执行SQL方法
	 * 
	 * @param shard
	 *            分片号，即 DBP GROUP ID
	 * @param callBack
	 *            执行SQL的方法（带返回值）
	 * @return
	 */
	public static void executeNewTransaction(String tableIndex, SqlVoidCallBack callBack) {
		sqlRouteExecutor.executeNewTransaction(tableIndex, callBack);
	}
}
